3.4.4 Debug set文
Debug set文はL2BM、L1BM、GRF0/1、LM0/1、Tレジスタに指定した値を書き込むエミュレータ実行時専用の制御文である。
実機で実行することはできない。
code:文法
d set<memory>n<group_id>c<l2b_id>b<l1b_id>m<mab_id>p<pe_id> <num_of_words> <payload>
ここで<memory>から<num_of_words>までの文法はDebug get文(3.4.3 Debug get文)と同様である。ただし、<memory>にPDMやDRAMを指定することはできない。
また、Debug get文と異なり、<dtype>の指定はない。
<payload>は書き込むデータの内容を、 16 進 16 桁で表記した 1 長語を単位として必要な長語数分並べて書
く。
長語データの表記にはいくつかのシンタックスシュガーがある。これら必要な長語数およびシンタックスシュガーについての詳細は後述する。
効果
指定したデータを、指定したメモリ要素・アドレスに書き込む。
<payload>に書くべき長語の数は、<memory>によって決まるペイロード語長に語数 num_of_wordsを掛けたものである。
実際に書かれた長語の数がそれと異なっているとエラーになる。
可能なメモリ要素とアクセス語長の指定、またそれに対応するペイロード語長を表3.2に列挙する。
ここに示したとおり、アクセス語長が単語の際にはペイロード語長がアクセス語長より長くなる。
このとき、ペイロードは長語ごとにLSB側の単語は無視され、MSB側の単語が書き込まれる。
2 長語以上を書き込むときのアドレッシングはビッグエンディアンである。
つまり、ペイロードの先頭側が小さいアドレスに入る。
table:表3.3 Debug set文で書き込み可能なメモリ要素と語長の組み合わせ
<memory> メモリ要素 アクセス語長 ペイロード語長
$lc L2BM 長語 1
$lb L1BM 長語 1
$llb L1BM 2長語 2
$r, $s, $m, $n GRF0/GRF1/LM0/LM1 単語 1
$lr, $ls, $lm, $ln GRF0/GRF1/LM0/LM1 長語 1
$llr, $lls, $llm, $lln GRF0/GRF1/LM0/LM1 2長語 2
$t, $lt Tレジスタ 長語 1
$llt Tレジスタ 2長語 2
メモリ
<payload>のそれぞれの長語の記述は 16進16桁整数、16進長語整数、16進単語整数、16進半語整数の 4つの記法から選ぶことができる。
表 3.4 にそれぞれの記法の説明と例を示す。
1 行の中で 16 進長語・単語・半語整数は混在できるが、16 進 16 桁整数は他の記法とは混在できない。
<num_of_words>は<memory>で指定したアクセス語長を単位として<addr>から何語を書き込むかを 10 進数で指定する。
Tレジスタのアクセス範囲に関する注意は Debug get文と同様である。
エラー
<payload>を先頭から解釈していき、表 3.4 に示した記法のいずれにも当てはまらないものがあるとエラーとなる
<memory>とnum_of_wordsによって決まるペイロードの長語数と実際のの長さが異なる場 合エラーとなる
<payload>に現れる数がその記法における固定または最大の桁数を超えている場合エラーとなる
table:表3.4 Debug set文で書き込む長語データの記法。例は全ての記法で同一の値となる。 16 進長語・単語・半語整数の例では固定長でないため先頭に 0 は不要となっている。また、いずれも符号あり整数は使用不可である
記法名 記法 例
16進16桁整数 固定長 16 桁の 16 進数 0123456789abcdef
16進長語整数 lの後に 1 つの最大 16 桁の 16 進数 l123456789abcdef
16進単語整数 sの後に_区切りの 2 つの最大 8 桁の 16 進数 s1234567_89abcdef
16進半語整数 hの後に_区切りの 4 つの最大 4 桁の 16 進数 h123_4567_89ab_cdef
code:例 1
d set $lm0n0c0b0m0p0 2 h1_2_3_4h5_6_7_8
d set $lm4n0c0b0m0p0 2 laabblccdd
d set $lm8n0c0b0m0p0 2 l4321hf_e_d_c
d get $lm0n0c0b0m0p0 6
16進長語整数記法と 16進半語整数記法、およびそれらの混在の例。
code:txt(py)
DEBUG-LM0(n0c0b0m0p0,0):(f:0,i:{{0x1,0x2},{0x3,0x4}},v:0x1000200030004) #d get $lm0n0c0b0m0p0 6
DEBUG-LM0(n0c0b0m0p0,2):(f:0,i:{{0x5,0x6},{0x7,0x8}},v:0x5000600070008) #d get $lm0n0c0b0m0p0 6
DEBUG-LM0(n0c0b0m0p0,4):(f:0,i:{{0x0,0x0},{0x0,0xAABB}},v:0xAABB) #d get $lm0n0c0b0m0p0 6
DEBUG-LM0(n0c0b0m0p0,6):(f:0,i:{{0x0,0x0},{0x0,0xCCDD}},v:0xCCDD) #d get $lm0n0c0b0m0p0 6
DEBUG-LM0(n0c0b0m0p0,8):(f:0,i:{{0x0,0x0},{0x0,0x4321}},v:0x4321) #d get $lm0n0c0b0m0p0 6
DEBUG-LM0(n0c0b0m0p0,10):(f:0,i:{{0xF,0xE},{0xD,0xC}},v:0xF000E000D000C) #d get $lm0n0c0b0m0p0 6
code:例 2
d set $lr0n0c0b0m0p0 2 s1_2s3_4
d get $lr2n0c0b0m0p0 1
16進単語整数記法の例。
ペイロード位置とアドレスの関係の例示にもなっている。
code:txt(py)
DEBUG-GREG0(c0b0m0p0,2):(f:0,i:{{0x0,0x3},{0x0,0x4}},v:0x300000004) #d get $lr2n0c0b0m0p0 1
命令 1 行目では$lr0から2長語分書き込んでおり、最初の1長語には1_2が、次の 1 長語には3_4が書き込まれる。
命令 2 行目では$lr2、すなわち$lr0から1長語進んだアドレスから読み出しているので、結果は単語の3と4が並んだ値となる。
code:例 3
d set $m0n0c0b0m0p0 2 h1_2_3_4h5_6_7_8
d get $lm0n0c0b0m0p0 2
ペイロード語長がアクセス語長より長く、各長語のLSB側が捨てられる例。
アクセス語長は単語のため、2単語=1長語しか書き込みは行われない。よって、2長語目は0となる。
code:txt(py)
DEBUG-LM0(n0c0b0m0p0,0):(f:0,i:{{0x1,0x2},{0x5,0x6}},v:0x1000200050006) #d get $lm0n0c0b0m0p0 2
DEBUG-LM0(n0c0b0m0p0,2):(f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0) #d get $lm0n0c0b0m0p0 2
code:例 4
d set $tn0c0b0m0p01 123456789abcdef0
d get $lltn0c0b0m0p0 4
d set $lltn0c0b0m0p02 111122223333444455556666777788889999aaaabbbbccccddddeeeeffff0000
d get $lltn0c0b0m0p0 4
16進16桁整数記法によるTレジスタ書き込みの例。
1行目では1サイクル分の2長語エントリのMSB側1 長語に、3行目では2サイクル分の2長語エントリ全体に、それぞれ書き込んでいる
Debug get文による読み出しは2行目と4行目で同一で、2長語エントリ×4サイクル分全体を読み出している。
code:txt(py)
DEBUG-TREG(n0c0b0m0p0,0):{(f:5.62635e-221,i:{{0x1234,0x5678},{0x9ABC,0xDEF0}},v:0 x123456789ABCDEF0), (f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0)} #d get $lltn0c0b0m0p0 4
DEBUG-TREG(n0c0b0m0p0,1):{(f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0), (f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0)} #d get $lltn0c0b0m0p0 4
DEBUG-TREG(n0c0b0m0p0,2):{(f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0), (f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0)} #d get $lltn0c0b0m0p0 4
DEBUG-TREG(n0c0b0m0p0,3):{(f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0), (f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0)} #d get $lltn0c0b0m0p0 4
DEBUG-TREG(n0c0b0m0p0,0):{(f:1.80811e-226,i:{{0x1111,0x2222},{0x3333,0x4444}},v:0x1111222233334444), (f:1.19826E+103,i:{{0x5555,0x6666},{0x7777,0x8888}},v:0x5555666677778888)} #d get $lltn0c0b0m0p0 4
DEBUG-TREG(n0c0b0m0p0,1):{(f:-2.35957e-185, i:{{0x9999,0xAAAA},{0xBBBB,0xCCCC}},v:0x9999AAAABBBBCCCC), (f:-1.46007E+144,i:{{0xDDDD,0xEEEE},{0xFFFF,0x0}},v:0xDDDDEEEEFFFF0000)} #d get $lltn0c0b0m0p0 4
DEBUG-TREG(n0c0b0m0p0,2):{(f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0), (f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0)} #d get $lltn0c0b0m0p0 4
DEBUG-TREG(n0c0b0m0p0,3):{(f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0), (f:0,i:{{0x0,0x0},{0x0,0x0}},v:0x0)} #d get $lltn0c0b0m0p0 4